const {src, dest, parallel, series, watch} = require('gulp');

const loadPlugins = require('gulp-load-plugins');
const del = require('del');
const plugins = loadPlugins();

const clean = () => {
  return del(['dist', 'temp']);
};

const script = () => {
  return src('src/assets/scripts/*.js', {base: 'src'})
    .pipe(plugins.babel({presets: ['@babel/preset-env']}))
    .pipe(dest('temp'));
};

const style = () => {
  return src('src/assets/styles/*.scss', {base: 'src'})
    .pipe(plugins.sass({outputStyle: 'expanded'}))
    .pipe(dest('temp'));
};

const page = () => {
  return src('src/*.html', {base: 'src'})
    .pipe(plugins.swig({defaults: {cache: false}})) // 防止模板缓存导致页面不能及时更新
    .pipe(dest('temp'));
};

const image = () => {
  return src('src/assets/images/**', {base: 'src'})
    .pipe(dest('dist'));
};

const font = () => {
  return src('src/assets/fonts/**', {base: 'src'})
    .pipe(dest('dist'));
};

const extra = () => {
  return src('public/**', {base: 'public'})
    .pipe(dest('dist'));
};

const useref = () => {
  return src('temp/*.html', {base: 'temp'})
    .pipe(plugins.useref({searchPath: ['temp', '.']}))
    // html js css
    .pipe(plugins.if(/\.js$/, plugins.uglify()))
    .pipe(plugins.if(/\.css$/, plugins.cleanCss()))
    .pipe(plugins.if(/\.html$/, plugins.htmlmin({
      collapseWhitespace: true,
      minifyCSS: true,
      minifyJS: true,
    })))
    .pipe(dest('dist'));
};

const compile = parallel(style, script, page);

const build = series(
  clean,
  parallel(
    series(compile, useref),
    image,
    font,
    extra,
  ),
);

module.exports = {
  clean,
  build,
};
